/**
 * @file tools.h
 * @author SunWater
 * @brief 一些杂项帮助类的功能会写在这里
 * @version 0.1
 * @date 2025-05-07
 *
 */

#ifndef __TOOLS_H
#define __TOOLS_H

#include "stdbool.h"

// c++内容
#ifdef __cplusplus

#endif

// c语言内容
#ifdef __cplusplus
extern "C" {
#endif

// ----------------- 需要FreeRTOS的函数 -----------------
#if __has_include("cmsis_os.h")
#include "cmsis_os.h"

/// @brief 等待直到条件为真，不阻塞线程
#define wait_until_non_block(condition) \
    do {                                \
        osDelay(1);                     \
    } while (!(condition))

#else
// 如果 cmsis_os.h 不存在，提供一个空实现或警告
#warning "cmsis_os.h not found, skipping related functions."
#endif

// ----------------- 需要DWT的函数 -----------------
#if __has_include("bsp_dwt.h")
#include "bsp_dwt.h"

/// @brief 等待直到条件为真，阻塞
#define wait_until_block_DWT(condition) \
    do {                                \
        DWT_Delay(0.001);               \
    } while (!(condition))

#else
// 如果 bsp_dwt.h 不存在，提供一个空实现或警告
#warning "bsp_dwt.h not found, skipping related functions."
#endif

// ----------------- 需要HAL的函数 -----------------

/// @brief 等待直到条件为真，阻塞
#define wait_until_block_HAL(condition) \
    do {                                \
        HAL_Delay(1);                   \
    } while (!(condition))

#ifdef __cplusplus
}
#endif

#endif
